package net.contrend.material.dao;

import java.sql.Types;
import java.util.List;
import java.util.UUID;

import net.contrend.material.form.MaterialPurchaseItemForm;
import net.contrend.material.mapper.MaterialPurchaseItemMapper;
import net.contrend.system.dao.BaseDao;
import net.contrend.util.SqlUtils;
import net.contrend.util.StringUtils;

import org.springframework.jdbc.core.JdbcTemplate;

/**
 * <p>Copyright @ 2009 www.contrend.net</p>
 * <p>All right reserved. </p>
 * <p>项目名称			： 进销存管理系统 </p>
 * <p>JDK使用版本号		： jdk6.0 </P>
 * <p>描述				： 原料采购项 Dao </p>
 * @版本					： 1.0.0 
 * @author				： 谢庚才
 *
 * <p>修改历史 </p>
 * <p>修改时间            修改人员    修改内容 </p>
 * <p>Dec 11, 2009       谢庚才     新建 </p>
 */
public class MaterialPurchaseItemDao extends BaseDao {
	private String table = "material_purchase_item";

	public MaterialPurchaseItemDao() {
	}
	
	public MaterialPurchaseItemDao(JdbcTemplate jt) {
        this.jt = jt;
    }
	
	public int insert(MaterialPurchaseItemForm materialPurchaseItem) {
		String columns = "mpiId, materialId, msId, psId, unitPrice, quantity, unit, subtotal, createDate, status";
        String sql = SqlUtils.getInsertSql(this.table, columns);
        System.out.println(String.format("\n%1$s\n", sql));
        
        if (StringUtils.isBlank(materialPurchaseItem.getMpiId())) {
        	materialPurchaseItem.setMpiId(UUID.randomUUID().toString());
        }
        
        return this.jt.update(sql,
                new Object[]{
        			materialPurchaseItem.getMpiId(),
        			materialPurchaseItem.getMaterialId(),
        			materialPurchaseItem.getMsId(),
        			materialPurchaseItem.getPsId(),
        			materialPurchaseItem.getUnitPrice(),
        			materialPurchaseItem.getQuantity(),
        			materialPurchaseItem.getUnit(),
        			materialPurchaseItem.getSubtotal(),
        			materialPurchaseItem.getCreateDate(),
        			materialPurchaseItem.getStatus()
                },
                new int[]{
        			Types.VARCHAR,
        			Types.VARCHAR,
        			Types.VARCHAR,
        			Types.VARCHAR,
        			Types.DOUBLE,
        			Types.DOUBLE,
        			Types.VARCHAR,
        			Types.DOUBLE,
                    Types.DATE,
                    Types.VARCHAR
                });
	}
	
	public int update(MaterialPurchaseItemForm materialPurchaseItem) {
		String columns = "unitPrice, quantity, unit, subtotal, createDate, status";
        String sql = SqlUtils.getUpdateSql(this.table, columns, "mpiId = ?");
        System.out.println(String.format("\n%1$s\n", sql));
        return this.jt.update(sql,
        		new Object[]{
    			materialPurchaseItem.getUnitPrice(),
    			materialPurchaseItem.getQuantity(),
    			materialPurchaseItem.getUnit(),
    			materialPurchaseItem.getSubtotal(),
    			materialPurchaseItem.getCreateDate(),
    			materialPurchaseItem.getStatus()
            },
            new int[]{
    			Types.DOUBLE,
    			Types.DOUBLE,
    			Types.VARCHAR,
    			Types.DOUBLE,
                Types.DATE,
                Types.VARCHAR
            });
	}
	
	public int delete(String mpiId) {
        String sql = SqlUtils.getDeleteSql(this.table, "mpiId = ?");
        System.out.println(String.format("\n%1$s\n", sql));
        return this.jt.update(sql, new Object[]{mpiId}, new int[]{Types.VARCHAR});
    }
	
	@SuppressWarnings("unchecked")
	public MaterialPurchaseItemForm queryById(String mpiId) {
        String sql = "select * from "+this.table+" where mpiId = ?";
        List<MaterialPurchaseItemForm> materialPurchaseItemList = this.jt.query(sql,
                new Object[]{mpiId}, new int[]{Types.VARCHAR}, new MaterialPurchaseItemMapper());
        if (null != materialPurchaseItemList && 0 < materialPurchaseItemList.size()) {
            return materialPurchaseItemList.get(0);
        }
        return null;
    }
}
